The invention is directed to messaging systems.
A messaging system typically delivers a message from one messaging system user to another across a computer connection. The message is delivered by storing the message in the user's messaging system mailbox. The mailbox is a data storage area to which the user has access for reading and otherwise manipulating the user's messages. The data storage area is typically made up of one or more computer databases, one or more computer files, one or more computer tables or folders, or a combination. The user's mailbox is typically stored along with other users' mailboxes on a messaging server computer in a computer-readable storage medium such as a hard disk.
A messaging system may include multiple servers that are connected on a network. In such a system, each server includes a directory that indicates, for each mailbox, the server on which the mailbox is stored. To deliver the message to the user, the system first consults the directory to determine which server stores the user's mailbox, and then directs the message to that server for delivery into the user's mailbox.
A user's mailbox may need to be moved from its original server (I) to another server (II) if, for example, storage space on server I becomes an issue or the user changes locations and is assigned to use server II. A typical mailbox move can take many minutes or hours, because the mailbox typically contains a large amount of data in the form of messages and folders of messages that must be moved. Some methods exist for accomplishing the move of the mailbox, but each of these existing methods is prone to message delivery failure or message loss or both. Message delivery failure causes the sender of a message to receive a non-delivery report that indicates that the message was undeliverable. Message loss occurs when the intended recipient-user does not receive a message and the sender of the message does not receive a non-delivery report. Both message delivery failure and message loss are undesirable, because both reduce the efficiency and reliability of the messaging system.
One existing method of moving a user's mailbox includes the following sequence of steps: (1) a new mailbox is created for the user on server II, (2) the directories of both servers are updated to direct messages, that are arriving for user, to the new, i.e., server II, mailbox instead of to the server I mailbox, (3) the contents of the server I mailbox are copied to the server II mailbox, and (4) the server I mailbox is deleted. Thus, new messages that arrive for the user during the move are delivered to the user's server II mailbox. If the move is successfully completed, the end result is that the server II mailbox contains the messages copied from the server I mailbox as well as the new messages. However, in the event that the move fails and must be restarted due to, for example, a system failure during the copying step, the user loses the new messages that arrived during the failed move. The messages are lost because the messages become unrecoverable when the move is restarted and a new mailbox is created again on server II.
In the first existing method, the directories are updated before the contents are copied. By contrast, in a second existing method of moving a user's mailbox, the directories are updated after the contents are copied. Thus, the sequence of the second existing method is: (1) a new mailbox is created for the user on server II, (2) the contents of the server I mailbox are copied to the server II mailbox, (3) the directories of both servers are updated to direct messages, that are arriving for user, to the new server II mailbox instead of to the server I mailbox, and (4) the server I mailbox is deleted. In this method, new messages that arrive for the user during the move are delivered to the user's server I mailbox. During step (2), the copying is typically accomplished folder-by-folder. For example, the contents of a "new unread messages" folder of the server I mailbox are copied to a "new unread messages" folder of the server II mailbox. Therefore, if a message is delivered to the server I "new unread messages" folder after the contents of that folder have already been copied, that message is never copied and is lost when the server I mailbox is deleted in step (4). If there is one such server I folder that collects all new messages that arrive for the user during the move, it is advantageous to copy that folder last. Copying that folder last minimizes the window of time during which a new message can be lost, because new messages are re-directed to the server II mailbox in step (3) immediately after the last folder is copied.
In a typical system, however, new messages are not delivered to only one folder in the mailbox. For example, according to one or more automatic folder-storage rules, new messages may be directed to different folders depending on the characteristics of the message. New messages may also be automatically directed to different folders according to subject matter. Therefore, in a typical system using this second existing method, the window of time during which a new message can be lost cannot be significantly minimized, because there is no single folder that can be copied last to capture all new messages received during the move.
A third existing method of moving a user's mailbox also involves updating the directories after the contents are copied, but, unlike in the second existing method, message delivery from other servers is suspended during copying. Thus, in the third existing method, the following sequence of steps is used: (1) the delivery of new messages from other servers to all mailboxes on server I is suspended and the new messages from the other servers are queued outside server I, (2) a new mailbox is created for the user on server II, (3) the contents of the user's server I mailbox are copied to the server II mailbox, (4) the directories of both servers are updated to direct messages, that are arriving for user, to the new server II mailbox instead of to the server I mailbox, (5) the server I mailbox is deleted, and (6) the messages queued outside server I are delivered in accordance with the updated directories. This third existing method results in both message delivery failure and message loss. Message deliver failure can occur in this method simply due to the delay in delivery as a result of the move, especially if step (3) takes hours. This failure occurs when the delay causes the delivery time to exceed the maximum delivery time expected by the sending server, which then uses a non-delivery report to indicate to the message's sender that the message could not be delivered.
In this third existing method, message delivery failure also occurs with respect to all new messages directed from server II to the user's mailbox during the move. These failures occur because server II detects a circular path, from server II back to server II, for each of these new messages when the new messages are delivered in step (6). The circular path results because the messages are sent from server II and are directed in step (6) to the new mailbox which is stored on server II. Failing to deliver messages for which a circular path is detected is a standard error-detection feature of messaging systems.
Due to a standard optimization feature of messaging systems, message loss occurs in this third existing method with respect to messages directed from server I to the user's mailbox during the move. In the optimization feature, messages directed from a server to a destination mailbox on the same server take a different path from messages directed to that destination mailbox from outside the server. As a result, in this method, messages directed from server I to the user's mailbox are not queued but are in fact delivered to the user's server I mailbox. As discussed above with respect to the second existing method of moving a mailbox, new messages are typically not delivered to only one folder in the mailbox. Therefore, these messages directed from server I are subject to being missed during the copying step (3) and are therefore subject to being lost.
Finally with respect to this third existing method, the delay in delivery is not limited to messages directed to the mailbox being moved, but exists for all messages directed from outside server I to mailboxes on server I. Thus, all users with mailboxes on server I are affected, even though only one user's mailbox is being moved. As a result, for example, all of these users can experience several such delays per day if several mailboxes are moved each day.
A fourth existing method of moving a user's mailbox also involves updating the directories after the contents are copied, but, unlike in the previous existing methods, the mailbox is listed in neither directory during copying. The fourth existing method thus includes the following sequence of steps: (1) the directory of server I is changed so that the mailbox to be moved is not listed in that directory, (2) a new mailbox is created for the user on server II without listing the new mailbox in the server II directory, (3) the contents of the user's server I mailbox are copied to the server II mailbox, (4) the directories of both servers are updated to direct messages, that are arriving for user, to the new server II mailbox instead of to the server I mailbox, and (5) the server I mailbox is deleted. In this method, message delivery failure occurs for all new messages that arrive for the user between steps (1) and (4). These failures occur because these messages cannot be delivered to either the server I mailbox or the server II mailbox. These messages cannot be delivered to the server I mailbox because the server I mailbox is not listed in the server I directory. And these messages cannot be delivered to the server II mailbox because none of the system's directories has a listing for the server II mailbox.